package common;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import common.CMultinomial;
import common.Critique;


public class CDeterminationPolarite extends CMultinomial{
	
	 private String fichierSauvegardePolarite ;// ="dvd/justlabt.txt";

	public CDeterminationPolarite(
			ArrayList<File> fichiersAp, File FicTest, String outputFile,  boolean suppression,
			double seuil, double epsilon) {
		super(fichiersAp, FicTest, suppression, seuil, epsilon, false);
		fichierSauvegardePolarite = outputFile;
		//System.out.println("constructeur " + fichierSauvegardePolarite);
	}

	/**
	 * Fonction classification() permettant ici, de prendre
	 * chaque critique du fichier de test et de déterminer, grâce au fichier d'apprentissage
	 * courant, de déterminer la polarité de chaque critique. Cela permet ainsi
	 * d'écrire dans un fichier résultat "justlab.txt" chaque critique du jeu de
	 * test, sauf que cette fois, les critiques n'auront pas comme polarité "unknown",
	 * mais "positive" ou "negative".
	 */
	@Override
	public void classification() {
		System.out.println("Détermination des polarités de"+fichierSauvegardePolarite);
		try{
			ArrayList<Critique> lesCritiquesAEvaluer = determinerLesCritiques(super.getFichierTest());
			
			//System.out.println("classification "+ fichierSauvegardePolarite);
			PrintWriter ecrivain_justlab =  new PrintWriter(new BufferedWriter(new FileWriter(fichierSauvegardePolarite)));

			System.out.println("Nombre critiques du fichier test : " + lesCritiquesAEvaluer.size());
			for(int i = 0; i < lesCritiquesAEvaluer.size(); i++){

				nbCritiquesJeuDeTestCourant++;
				
				double logVraiSemblancePositive;
				double logVraiSemblanceNegative;

				logVraiSemblancePositive = logVraisemblance(lesCritiquesAEvaluer.get(i).getContenu(), "positive");
				logVraiSemblanceNegative = logVraisemblance(lesCritiquesAEvaluer.get(i).getContenu(), "negative");

				// Apparemment, la critique "unknown" a l'air d'�tre plut�t positive...
				if(logVraiSemblancePositive > logVraiSemblanceNegative){
					ecrivain_justlab.println("<review id='"+ 
							lesCritiquesAEvaluer.get(i).getIdentifiant() + "' class='positive'>");
					ecrivain_justlab.println(lesCritiquesAEvaluer.get(i).getContenu());
					ecrivain_justlab.println("</review>\n");
				}
				// Apparemment, la critique "unknown" a l'air d'�tre plut�t n�gative...
				if(logVraiSemblancePositive < logVraiSemblanceNegative){
					ecrivain_justlab.println("<review id='"+ 
							lesCritiquesAEvaluer.get(i).getIdentifiant() + "' class='negative'>");
					ecrivain_justlab.println(lesCritiquesAEvaluer.get(i).getContenu());
					ecrivain_justlab.println("</review>\n");
				}
			}
			ecrivain_justlab.close();
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}
}
